package sword_offer;

import java.util.Arrays;

/**
 * @ClassName _21ExchangeNumber
 * @Description: TODO
 * @Author: yongliang.ma
 * @Create_time:2022/10/9 13:27
 */
public class _21ExchangeNumber {

    public static void main(String[] args) {
        int[] ints = {2,1,3,5,8,9};
        int[] exchange = new _21ExchangeNumber().exchange(ints);
        System.out.println(Arrays.toString(exchange));
    }

    // 调整数字位置，使得奇数在前 偶数在后
    // 沟通清楚 是否可以修改奇数之间的相对位置，如果可以则可以在本数组内进行交换
    public int[] exchange(int[] nums){
        if (nums == null || nums.length == 0)
            return null;

        int head = 0, tail = nums.length - 1;
        while (head < tail){
            // 如果头位置是奇数 则向后偏移 继续
            if ((nums[head] & 1) == 1){// 这里做了一步位运算的优化，
                head++;
                continue;
            }
            // 如果尾位置是偶数，则向前便宜，继续
            if ((nums[tail] & 1) == 0){
                tail--;
                continue;
            }
            // 前和后都需要调换，所以这里对调二者的位置
            swap(nums, head, tail);
            head++;
            tail--;
        }

        return nums;
    }

    public void swap(int[] nums, int indexA, int indexB){
        int temp = nums[indexA];
        nums[indexA] = nums[indexB];
        nums[indexB] = temp;
    }
}
